package com.example.mydesignmodule.proxy;

import java.lang.reflect.Proxy;

/**
 * @author tgw
 * @date 2021/1/22
 */
public class ProxyRunMain {

    public static void main(String[] args) {
        System.out.println("静态代理");
        ProxyShowContent proxyShowContent = new ProxyShowContent("showContent");
        proxyShowContent.showProxyContent();

        System.out.println("再次调用，使用的同一个代理类--实现类 不需要初始化");
        proxyShowContent.showProxyContent();


        System.out.println("动态代理");
        //注意这里要使用接口
        BaseProxy showContent = new ShowContent("----动态代理具体做的事情----");
        DynamicPro dynamicPro = new DynamicPro(showContent);
        //获取被代理类ShowContent的classLoader
        ClassLoader classLoader = showContent.getClass().getClassLoader();

        //动态构造一个代理人--注意这里要使用接口
        BaseProxy showContent1 = (BaseProxy) Proxy.newProxyInstance(classLoader,new Class[]{BaseProxy.class},dynamicPro);
        showContent1.showProxyContent();

    }
}
